def cache_decorator(func):
    # 创建一个字典来存储函数的计算结果
    cache = {}

    def wrapper(*args, **kwargs):
        # 将参数转换为可哈希的形式（例如元组）
        key = args + tuple(sorted(kwargs.items()))

        # 检查缓存中是否已经有结果
        if key in cache:
            print(f"从缓存中获取结果：{cache[key]}")
            return cache[key]
        else:
            # 如果没有缓存结果，调用函数并存储结果
            result = func(*args, **kwargs)
            cache[key] = result
            print(f"计算结果并缓存：{result}")
            return result

    return wrapper


# 示例函数：计算斐波那契数列
@cache_decorator
def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)


# 示例函数：计算平方根
@cache_decorator
def sqrt(n):
    import math
    return math.sqrt(n)


# 测试缓存装饰器
print("计算斐波那契数列：")
print(fibonacci(10))  # 计算并缓存
print(fibonacci(10))  # 从缓存中获取

print("\n计算平方根：")
print(sqrt(25))  # 计算并缓存
print(sqrt(25))  # 从缓存中获取